多年来，C++语言设计人员一直在探索如何约束模板的参数。例如，我们的原型max()模板中，希望预先声明，对于不能使用小于操作符进行比较的类型，不应该调用。其他模板可能希望使用有效的“迭代器”类型(对于该术语的一些正式定义)或有效的“算术”类型(可能比内置算术类型集更广泛的概念)进行实例化。

概念是一个或多个模板参数的命名约束集。开发C++11标准的过程中，为概念设计了一个丰富的系统。但将该特性集成到语言规范中的话，需要太多的委员会资源，概念最终从C++11中删除了。过了一段时间，就有一种不同的特性设计提出，概念似乎将以某种形式进入语言。就在这本书将要印刷之际，标准化委员会投票决定将新设计的概念集成到C++20的草案中。这里，我们将介绍这种新设计的概念。

本书的主要章节中，已经提出并展示了一些概念的应用:

\begin{itemize}
\item 
第6.5节说明了如何使用需求和概念来启用构造函数，只有当模板参数可转换为字符串时(以避免意外地将构造函数用作复制构造函数)。

\item 
第18.4节展示了如何使用概念，来指定和要求用于表示几何对象类型的约束。
\end{itemize}